package com.wuji1626.spark.rdd.transform

import org.apache.spark.{SparkConf, SparkContext}

object RDD_Transform_reduceByKey {

  def main(args: Array[String]): Unit = {
    // Step1: 准备环境
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
    val sc = new SparkContext(sparkConf)
    // Step2: 算子 reduceByKey：相同的 Key 的数据进行 value 数据的聚合操作
    // Scala 语音中一般聚合操作都是两两聚合，spark 基于 Scala 开发，所以它的聚合也是两两聚合
    val rdd = sc.makeRDD(List(("a",1),("a",2),("a",3),("b",4)))
    val reduceRDD = rdd.reduceByKey(
      (x: Int, y: Int) => {
        println(s"x=${x}, y=${y}")
        (x + y)
      })
    reduceRDD.collect().foreach(println)
    // Step3: 关闭环境
    sc.stop()
  }
}
